package cn.tedu.tmall.admin.content.serivce.impl;

import cn.tedu.tmall.admin.content.dao.mapper.CategoryMapper;
import cn.tedu.tmall.admin.content.dao.repository.ICategoryRepository;
import cn.tedu.tmall.admin.content.pojo.param.CategoryAddParam;
import cn.tedu.tmall.admin.content.pojo.po.CategoryPO;
import cn.tedu.tmall.admin.content.serivce.ICategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 增加类别业务层实现
 */
@Slf4j
@Service
public class CategoryService implements ICategoryService {

    //@Autowired
    //private CategoryMapper categoryMapper;

    @Autowired
    private ICategoryRepository categoryRepository;

    /**
     * 1 通过验证
     * 2 判断类别名称是否存在
     * 3 类别名称不存在 保存
     * 4 存在 抛异常
     * @param categoryAddParam
     */
    @Override
    public void addCategory(CategoryAddParam categoryAddParam) {
        log.debug("Service 增加类别-入参:{}",categoryAddParam);
        //1 通过验证
        //2 判断类别名称是否存在
        String name = categoryAddParam.getName();
        //通过名称查询类别

        /**
         * 这个查询如果数据库有多条符合条件的记录会报 TooManyResultException
         * 1 该mybatis的返回结果
         * 2 plus
         */
        log.debug("Service 增加类别-通过名称查询类别-入参:{}",name);
        Integer count = categoryRepository.countCategoryByName(name);
        log.debug("Service 增加类别-通过名称查询类别-入参:{},出参:{}",name,count);
        if (count == 0) {
            log.debug("Service 增加类别-类别为空,类别名称:{}",name);
            //类别名称不存在
            CategoryPO newCategoryPO = new CategoryPO();
            //newCategoryPO.setName(categoryAddParam.getName());
            BeanUtils.copyProperties(categoryAddParam,newCategoryPO);
            log.debug("Service 增加类别-保存类别-入参:{}",newCategoryPO);
            //categoryMapper.save(newCategoryPO);//mybaits方式
            categoryRepository.save(newCategoryPO);
            log.debug("Service 增加类别-保存类别-入参:{},成功",newCategoryPO);
        }else {
            log.debug("Service 增加类别-类别不为空,类别名称:{}",name);
            //类别名称存在
            //抛出异常
            throw new RuntimeException("类别名称存在");
        }

        //这个通过类别名称查询类别的方法应该返回什么值?
        // string 类别名称
        // Category 表示一个数据库的对象,和数据库表中的字段一一对应.

        //mapper 数据库的操作
        //1 mapper 接口
        //2 resources 里面是xxx.xml 里面写的是sql
        //dao d data a access o obj
        //去数据库查询 select name from category where name= 'name'

        //   1 存在 抛个异常,告诉接口调用者,说类别名称已经存在.
        //   2 不存在 保存类别到数据库
    }
}
